#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
#define MAX_SIZE 10000
int MPrime(int n);
int Hash(int ts, int n);
bool have[MAX_SIZE];
int main()
{
    int MSize, N;
    int num, result; //input num
    scanf("%d %d", &MSize, &N);
    MSize = MPrime(MSize);
    for (int i = 0; i < MSize; i++)
        have[i] = false;
    for (int i = 0; i < N-1; i++)
    {
        scanf("%d", &num);
        result = Hash(MSize, num);
        if (result != -1)
            printf("%d ", result);
        else
            printf("- ");
    }
    scanf("%d", &num);
    result = Hash(MSize, num);
    if (result != -1)
        printf("%d", result);
    else
        printf("-");
    return 0;
}

//求素数
int MPrime(int n)
{
    //最小的情况需要考虑 最小素数为 2
    if (n == 1)
        return 2;

    n--;//把n包含进来
    int i, p = (n % 2) ? n + 2 : n + 1;//下一个奇数开始
    while (1)
    {
        for (i = (int)sqrt(p); i > 2; i--)
            if (!(p % i))
                break;
        if(i==2)
            break;
        else
            p += 2;
    }
    return p;
}
int Hash(int ts, int n)
{
    int key;
    int qp = 0, i;
    for (i = 0; i < ts; i++)
    {
        key = (n + i * i) % ts;
        if(!have[key])
        {
            have[key] = true;
            return key;
        }
            
    }
    return -1;
}
// wrong case
// int Hash(int ts, int n)
// {
//     int key = n % ts;
//     int qp = 1, i;
//     if(!have[key])
//     {
//         have[key] = true;
//         return key;
//     }
//     else
//     {
//         while (qp * qp < ts)
//         {
//             key += qp * qp;
//             qp++;
//             if (key >= ts)
//                 key -= ts;
//             if (!have[key])
//             {
//                 have[key] = true;
//                 return key;
//             }
//         }
//         return -1;
//     }
// }